\section{Autenticación por clave pública-privada}

Para que el módulo \texttt{GRID::Machine} y, en consecuencia,
el módulo \texttt{Bench::Test} trabajen correctamente, es necesario
que las máquinas remotas sobre las que se desea lanzar las ejecuciones
permitan una autenticación automática con SSH. En los siguientes
apartados se
detalla el procedimiento a seguir para establecer conexiones automáticas
entre la máquina local y una máquina remota. Esta información ha sido
extraída de la documentación del módulo \texttt{GRID::Machine} escrito
por \textbf{Casiano Rodríguez León} \cite{CasianoGridMachineDoc}.

\subsection{Generación de claves}

El primer paso para establecer la autenticación automática entre dos
máquinas es generar una clave pública. Para ello se utiliza el
comando \texttt{ssh-keygen}:

\begin{verbatim}
   $ ssh-keygen -t rsa -N ''
\end{verbatim}

La opción \texttt{-t} indica el tipo de clave que se desea generar.
Existen tres tipos de claves: \textit{rsa1}, \textit{rsa}, y \textit{dsa}.
La opción \texttt{-N} establece el \textit{passphrase}. Es muy útil dejarlo
vació cuando se usa con restricciones de clave o cuando se trabaja con
comandos por lotes y procesamiento automático como en este caso.

Por defecto, las claves pública y privada generadas, se almacenan en
los ficheros \texttt{\$HOME/.ssh/id\_rsa} y
\texttt{\$HOME/.ssh/id\_rsa.pub} respectivamente.

El contenido del fichero \texttt{id\_rsa.pub} es algo similar a esto:

\begin{verbatim}
   ssh-rsa AAAAB3NzaC1ycAAABIwAAAIEArkwv9X8eTVK4F7pMlSt45pWoiakFkZMw
   G9BjydOJPGH0RFNAy1QqIWv7vS5K2tr+EEO+F8WL2Y/jK4ZkUoQgoi+n7DWQVOHsR
   ijcS3LvtO+50Np4yjXYWJ9JL6GHcp8o7+YKEyVUMB2CSDOP99eF9g5Q0d+1U2WVdB
   WQM= user@host
\end{verbatim}

\subsection{Instalar la clave pública}

Una vez generado el par de claves, se debe instalar la clave pública en la
máquina remota. Para ello, se añade la clave pública generada (el contenido
del fichero \texttt{id\_rsa.pub}) al final del fichero
\texttt{/home/user/.ssh/authorized\_keys} en la máquina remota. Si está disponible
el script \texttt{ssh-copy-id} se podría hacer de la siguiente forma:

\begin{verbatim}
   $ ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote.machine
\end{verbatim}

Otra forma de hacerlo podría ser ejecutar el siguiente comando:

\begin{small}
\begin{verbatim}
$ ssh machine "umask 077; cat >> .ssh/authorized_keys" < .ssh/id_rsa.pub
\end{verbatim}
\end{small}

Una última opción es hacerlo a mano:

\begin{verbatim}
   $ scp .ssh/id_rsa.pub remote.machine:~/

   $ cat id_rsa.pub >> .ssh/authorized_keys
\end{verbatim}

El primer comando se debe ejecutar en la máquina local para copiar el
archivo a la máquina remota, y el segundo se ejecuta en la máquina
remota para volcar el contenido del fichero \texttt{id\_rsa.pub} al
final del fichero \texttt{authorized\_keys}.

\subsection{Comprobación}

Una vez instalada la clave pública en la máquina remota, se debería
ser capaz de autenticarse sin contraseña utilizando la clave privada:

\begin{verbatim}
   $ ssh remote.machine
   Linux remote.machine 2.6.15-1-686-smp #2 SMP Mon Mar 6 15:34:50 UTC
   Last login: Sat Jul  7 13:34:00 2008 from local.machine
   user@remote.machine:~$       
\end{verbatim}

También podrían ejecutarse comandos automáticamente en el servidor
remoto:

\begin{verbatim}
   $ ssh remote.machine uname -n
   remote.machine
\end{verbatim}
